大家好!這篇要為大家分享BroadcastReceiver類別,內部有一個方法為onReceive可以負責接收廣播所傳送的資料,接者,我們就趕緊討論BroadcastReceiver類別!
BroadcastReceiver是一個基礎的類別用來接收或處理broadcast intents。
註冊廣播器有分兩種方式:
1.動態註冊
2.靜態註冊
手動註冊的方法,其註冊內容不是寫在AndroidManifest.xml內
常見註冊的方法為registerReceiver()
其註冊內容事先定義在AndroidManifest.xml內
// AndroidManifest.xml
<receiver
android:name=".Receiver"
android:enabled="true"/>
IntentFilter攔截Intent所描述的動作且和攔截的Intent做匹配,IntentFilter攔截的項目有actions, categories,data。
例如:
// 宣告要匹配的文字
private static final String FILTER_ACTION="broadcast";
// 建立IntentFilter物件
IntentFilter filter=new IntentFilter();
// filter攔截訊息
filter.addAction(FILTER_ACTION);
// filter攔截訊息與接收器一起註冊
registerReceiver(reciever,filter);
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcastreceiver">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--靜態註冊-->
<receiver android:name=".Reciever"
android:enabled="true"/>
</application>
</manifest>
public class Reciever extends BroadcastReceiver {
public void Receiver(){
// 建構子
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Debug","onReceive");
Toast.makeText(context,"我接收到訊息了",Toast.LENGTH_SHORT).show();
}
}
public class MainActivity extends AppCompatActivity {
// 攔截訊息
private static final String FILTER_ACTION="broadcast";
Reciever reciever=new Reciever();
Intent intent =new Intent(FILTER_ACTION);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 建立IntentFilter物件
IntentFilter filter=new IntentFilter();
// filter攔截訊息
filter.addAction(FILTER_ACTION);
// 註冊廣播
registerReceiver(reciever,filter);
Log.d("Debug","註冊完畢");
}
@Override
protected void onResume() {
super.onResume();
// 廣播
sendBroadcast(intent);
Log.d("Debug","傳送訊息");
}
@Override
protected void onPause() {
super.onPause();
// 取消註冊廣播
unregisterReceiver(reciever);
Log.d("Debug","取消註冊");
}
}
完成了,廣播可以傳送訊息又可以保持相同的頁面,在更新資料上有很大的用途!
Thank you for your time!